/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package redinftel.sesiones;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import redinftel.entidades.Mensaje;
import redinftel.entidades.Usuario;

/**
 * Clase para el manejo de datos de la entidad Mensaje.
 * @author Six Degrees Team
 */
@Stateless
public class MensajeFacade extends AbstractFacade<Mensaje> implements MensajeFacadeRemote {
    @PersistenceContext(unitName = "redinftel-ejbPU")
    private EntityManager em;

    protected EntityManager getEntityManager() {
        return em;
    }

    public MensajeFacade() {
        super(Mensaje.class);
    }

    @Override
    public List<Mensaje> obtenerEntrada(BigDecimal usuario){
        return em.createQuery("Select m FROM Mensaje m WHERE m.idReceptor.idUsuario = ?1 AND m.idReceptor.estado=\'ACTIVO\' ORDER BY m.fecha DESC")
                .setParameter(1,usuario). getResultList();
    }

    @Override
    public List<Mensaje> obtenerSalida(BigDecimal usuario){
        return em.createQuery("Select m FROM Mensaje m WHERE m.idEmisor.idUsuario = ?1 AND m.idEmisor.estado=\'ACTIVO\' ORDER BY m.fecha DESC")
                .setParameter(1,usuario). getResultList();
    }

    @Override
    public BigDecimal obtenerPK(){
        return (BigDecimal) em.createQuery("Select MAX(m.idMensaje) FROM Mensaje m")
                .getSingleResult();
    }

    @Override
    public int cambiarEstado(BigDecimal mensaje){
        return em.createQuery("UPDATE Mensaje m SET m.estado = \'LEIDO\' WHERE m.idMensaje =?1")
                .setParameter(1, mensaje).executeUpdate();
    }

    @Override
    public int obtenerNoLeidos(Usuario usuario){
        return new Integer( em.createQuery("Select COUNT(m) FROM Mensaje m WHERE m.idReceptor=?1 AND m.idReceptor.estado=\'ACTIVO\' AND m.estado=\'PORLEER\'")
                .setParameter(1,usuario).getSingleResult().toString());
    }
}
